package com.bdi.mqtt_broker.service;

import java.util.Map;
import java.util.Set;

/**
 * @author WangNing yogehaoren@gmial.com <br>
 * @since 1.0
 */
public interface RedisService {


    /**
     * 往 Redis Hash中插入值
     * @param key 键
     * @param field Hase-key
     * @param value Hash-value
     * @return 更新旧值返回0， 插入新值返回1; 时间复杂度O(1);
     */
    Long hset(String key, String field, String value);

    /**
     * 取Redis中 Hash中的值
     * @param key redis中Key
     * @param field  Hash Key
     * @return 如果值存在返回值，值不存在返回null; 时间复杂度O(1)
     */
    String hget(String key, String field);

    /**
     * 获取Hash中的全部值
     * @param key Redis key
     * @return Hash中的全部值; 时间复杂度O(N)
     */
    Map<String, String> hgetAll(String key);

    /**
     * 判断Hash是否存在某个键
     * @param key Redis-key
     * @param field Hash key
     * @return 键存在返回true，不存在返回false; 时间复杂度O(1)
     */
    Boolean hexists(String key, String field);

    /**
     * 从Hash删除指定的 Key
     * @param key Redis-key
     * @param fields Hash key
     * @return 被删除的N个元素; 时间复杂度O(1)
     */
    Long hdel(String key, String... fields);

    /**
     * 往Redis Set中插入值
     * @param key Set-Key
     * @param members members
     * @return 值已存在返回0 时间复杂度O(1)
     */
    Long sadd(String key, String... members);

    /**
     * 从Redis Set中取出所有值; 时间复杂度 O(N)
     * @param key Set-Key
     * @return Set values
     */
    Set<String> smembers(String key);

    /**
     * 删除Set中的值
     * @param key Redis Set Key
     * @param members 要删除的Set中的元素
     * @return 返回被删除的N个元素; 时间复杂度O(1)
     */
    Long srem(String key, String... members);

    /**
     * 删除Redis Key
     * @param key redis key
     * @return 删除结果
     */
    Long del(String key);

    /**
     * 存储字符串, 字符串最大长度不得超过 1073741824 bytes (1GB).
     * 时间复杂度 O(1)
     * @param key -
     * @param value -
     * @return 状态值
     */
    String set(String key, String value);

    /**
     * 从Redis 中 键的值
     * @param key -
     * @return key中的值; 复杂度O(1)
     */
    String get(String key);

    /**
     * 是否存在某个Key
     * @param key -
     * @return -
     */
    Boolean exists(String key);

}
